const getAiAnalysisResultApi = async (backend_domain_name, token, text) => {
    // 传入的 text 数据示例：
    // “平均抬头率/人数：85%/17人，最大抬头率：95%/19人，最小抬头率：75%/15人；”
    // 实际情况要根据 getVideoClassesApi 返回的 classes 来传入行为，而不仅仅是抬头率，而且格式必须和以上数据示例一样
    // 要上传的行为需要和 getVideoClassesApi 返回的 classes 一致，也就是说这个接口返回什么行为，这里就要上传什么行为，但是要改为中文；
    console.log('学生课堂行为数据：', text)
    const formData = new URLSearchParams();
    formData.append('token', token);
    formData.append('text', text);
    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/get_ai_analysis_result', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });

        const ai_output = await response.json();
        console.log('AI分析结果：', ai_output)
        return ai_output
    } catch (error) {
        console.error('AI 分析结果请求出错:', error);
        return '请求出错，请稍后再试'
    } 
}

const getVideoProcessedResultApi = async (backend_domain_name, token, video_id) => {
    const formData = new URLSearchParams();
    formData.append('token', token);
    formData.append('video_id', video_id);
    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/get_video_processed_result', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });

        const video_processed_result = await response.json();
        console.log('视频处理结果：', video_processed_result)
        return video_processed_result
        //video_processed_result 数据示例
        // {
        //     "TF": "T",
        //     "processed_result": [
        //         [
        //             {
        //                 "总人数": 22,
        //                 "时间点": 102
        //             },
        //             {
        //                 "总人数": 28,
        //                 "时间点": 204
        //             },
        //             {
        //                 "总人数": 29,
        //                 "时间点": 306
        //             },
        //             {
        //                 "总人数": 42,
        //                 "时间点": 408
        //             },
        //             {
        //                 "总人数": 50,
        //                 "时间点": 510
        //             },
        //             {
        //                 "总人数": 51,
        //                 "时间点": 612
        //             },
        //             {
        //                 "总人数": 51,
        //                 "时间点": 714
        //             },
        //             {
        //                 "总人数": 53,
        //                 "时间点": 816
        //             },
        //             {
        //                 "总人数": 52,
        //                 "时间点": 918
        //             },
        //             {
        //                 "总人数": 56,
        //                 "时间点": 1020
        //             },
        //             {
        //                 "总人数": 55,
        //                 "时间点": 1122
        //             },
        //             {
        //                 "总人数": 54,
        //                 "时间点": 1224
        //             },
        //             {
        //                 "总人数": 55,
        //                 "时间点": 1326
        //             },
        //             {
        //                 "总人数": 50,
        //                 "时间点": 1428
        //             },
        //             {
        //                 "总人数": 51,
        //                 "时间点": 1530
        //             },
        //             {
        //                 "总人数": 50,
        //                 "时间点": 1632
        //             },
        //             {
        //                 "总人数": 53,
        //                 "时间点": 1734
        //             },
        //             {
        //                 "总人数": 54,
        //                 "时间点": 1836
        //             },
        //             {
        //                 "总人数": 56,
        //                 "时间点": 1938
        //             },
        //             {
        //                 "总人数": 53,
        //                 "时间点": 2040
        //             },
        //             {
        //                 "总人数": 51,
        //                 "时间点": 2142
        //             },
        //             {
        //                 "总人数": 53,
        //                 "时间点": 2244
        //             },
        //             {
        //                 "总人数": 55,
        //                 "时间点": 2346
        //             },
        //             {
        //                 "总人数": 52,
        //                 "时间点": 2448
        //             },
        //             {
        //                 "总人数": 50,
        //                 "时间点": 2550
        //             },
        //             {
        //                 "总人数": 48,
        //                 "时间点": 2652
        //             },
        //             {
        //                 "总人数": 52,
        //                 "时间点": 2754
        //             },
        //             {
        //                 "总人数": 52,
        //                 "时间点": 2856
        //             },
        //             {
        //                 "总人数": 50,
        //                 "时间点": 2958
        //             }
        //         ],
        //         [
        //             {
        //                 "时间点": 102,
        //                 "站立人数": 3
        //             },
        //             {
        //                 "时间点": 204,
        //                 "站立人数": 11
        //             },
        //             {
        //                 "时间点": 306,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 408,
        //                 "站立人数": 4
        //             },
        //             {
        //                 "时间点": 510,
        //                 "站立人数": 5
        //             },
        //             {
        //                 "时间点": 612,
        //                 "站立人数": 3
        //             },
        //             {
        //                 "时间点": 714,
        //                 "站立人数": 1
        //             },
        //             {
        //                 "时间点": 816,
        //                 "站立人数": 3
        //             },
        //             {
        //                 "时间点": 918,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 1020,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 1122,
        //                 "站立人数": 0
        //             },
        //             {
        //                 "时间点": 1224,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 1326,
        //                 "站立人数": 1
        //             },
        //             {
        //                 "时间点": 1428,
        //                 "站立人数": 0
        //             },
        //             {
        //                 "时间点": 1530,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 1632,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 1734,
        //                 "站立人数": 0
        //             },
        //             {
        //                 "时间点": 1836,
        //                 "站立人数": 1
        //             },
        //             {
        //                 "时间点": 1938,
        //                 "站立人数": 1
        //             },
        //             {
        //                 "时间点": 2040,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 2142,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 2244,
        //                 "站立人数": 1
        //             },
        //             {
        //                 "时间点": 2346,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 2448,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 2550,
        //                 "站立人数": 3
        //             },
        //             {
        //                 "时间点": 2652,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 2754,
        //                 "站立人数": 3
        //             },
        //             {
        //                 "时间点": 2856,
        //                 "站立人数": 2
        //             },
        //             {
        //                 "时间点": 2958,
        //                 "站立人数": 0
        //             }
        //         ],
        //         [
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 102
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 204
        //             },
        //             {
        //                 "使用手机人数": 0,
        //                 "时间点": 306
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 408
        //             },
        //             {
        //                 "使用手机人数": 7,
        //                 "时间点": 510
        //             },
        //             {
        //                 "使用手机人数": 1,
        //                 "时间点": 612
        //             },
        //             {
        //                 "使用手机人数": 3,
        //                 "时间点": 714
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 816
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 918
        //             },
        //             {
        //                 "使用手机人数": 6,
        //                 "时间点": 1020
        //             },
        //             {
        //                 "使用手机人数": 6,
        //                 "时间点": 1122
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 1224
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 1326
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 1428
        //             },
        //             {
        //                 "使用手机人数": 5,
        //                 "时间点": 1530
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 1632
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 1734
        //             },
        //             {
        //                 "使用手机人数": 8,
        //                 "时间点": 1836
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 1938
        //             },
        //             {
        //                 "使用手机人数": 5,
        //                 "时间点": 2040
        //             },
        //             {
        //                 "使用手机人数": 5,
        //                 "时间点": 2142
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 2244
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 2346
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 2448
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 2550
        //             },
        //             {
        //                 "使用手机人数": 6,
        //                 "时间点": 2652
        //             },
        //             {
        //                 "使用手机人数": 2,
        //                 "时间点": 2754
        //             },
        //             {
        //                 "使用手机人数": 4,
        //                 "时间点": 2856
        //             },
        //             {
        //                 "使用手机人数": 3,
        //                 "时间点": 2958
        //             }
        //         ],
        //         [
        //             {
        //                 "时间点": 102,
        //                 "趴桌人数": 2
        //             },
        //             {
        //                 "时间点": 204,
        //                 "趴桌人数": 0
        //             },
        //             {
        //                 "时间点": 306,
        //                 "趴桌人数": 1
        //             },
        //             {
        //                 "时间点": 408,
        //                 "趴桌人数": 1
        //             },
        //             {
        //                 "时间点": 510,
        //                 "趴桌人数": 3
        //             },
        //             {
        //                 "时间点": 612,
        //                 "趴桌人数": 3
        //             },
        //             {
        //                 "时间点": 714,
        //                 "趴桌人数": 3
        //             },
        //             {
        //                 "时间点": 816,
        //                 "趴桌人数": 4
        //             },
        //             {
        //                 "时间点": 918,
        //                 "趴桌人数": 3
        //             },
        //             {
        //                 "时间点": 1020,
        //                 "趴桌人数": 1
        //             },
        //             {
        //                 "时间点": 1122,
        //                 "趴桌人数": 6
        //             },
        //             {
        //                 "时间点": 1224,
        //                 "趴桌人数": 4
        //             },
        //             {
        //                 "时间点": 1326,
        //                 "趴桌人数": 3
        //             },
        //             {
        //                 "时间点": 1428,
        //                 "趴桌人数": 5
        //             },
        //             {
        //                 "时间点": 1530,
        //                 "趴桌人数": 6
        //             },
        //             {
        //                 "时间点": 1632,
        //                 "趴桌人数": 7
        //             },
        //             {
        //                 "时间点": 1734,
        //                 "趴桌人数": 6
        //             },
        //             {
        //                 "时间点": 1836,
        //                 "趴桌人数": 7
        //             },
        //             {
        //                 "时间点": 1938,
        //                 "趴桌人数": 8
        //             },
        //             {
        //                 "时间点": 2040,
        //                 "趴桌人数": 7
        //             },
        //             {
        //                 "时间点": 2142,
        //                 "趴桌人数": 8
        //             },
        //             {
        //                 "时间点": 2244,
        //                 "趴桌人数": 9
        //             },
        //             {
        //                 "时间点": 2346,
        //                 "趴桌人数": 7
        //             },
        //             {
        //                 "时间点": 2448,
        //                 "趴桌人数": 5
        //             },
        //             {
        //                 "时间点": 2550,
        //                 "趴桌人数": 5
        //             },
        //             {
        //                 "时间点": 2652,
        //                 "趴桌人数": 5
        //             },
        //             {
        //                 "时间点": 2754,
        //                 "趴桌人数": 9
        //             },
        //             {
        //                 "时间点": 2856,
        //                 "趴桌人数": 8
        //             },
        //             {
        //                 "时间点": 2958,
        //                 "趴桌人数": 7
        //             }
        //         ]
        //     ]
        // }
        // 当前数据示例只展示了三个行为，最多的情况会返回四种行为，还有一个抬头行为，所以说不同的视频id返回的行为数是不一样的，但是最多为四种
        // 分别为 趴桌，抬头，使用手机，站立
    } catch (error) {
        console.error('视频处理结果请求出错:', error);
        return '请求出错，请稍后再试'
    }
}
async function checkToken(backend_domain_name, token) {
    const formData = new URLSearchParams();
    formData.append('token', token);

    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/check_token', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });

        const data = await response.json();
        if (data.TF === 'T') {
            return true;
        } else {
            return false;
        }
    } catch (error) {
        console.error('请求错误:', error);
        return false;
    }
}

async function getVideoImagePathsApi(backend_domain_name, token, video_id) {
    console.log('视频ID：', video_id)
    const formData = new URLSearchParams();
    formData.append('token', token);
    formData.append('video_id', video_id);

    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/get_video_image_paths', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });

        const result = await response.json();
        if (result.TF === 'T') {
            return result.image_paths
            // 返回的路径里面的图像名字都是由数字组成的，且是连续的，比如1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, 6.jpg, 7.jpg, 8.jpg, 9.jpg, 10.jpg
            // 这些 数字 * seconds(帧提取间隔) 就是图像在视频中对应帧数
            //返回的image_paths是一个列表
            // 数据示例
            // [
            //     “static/video_images/1.jpg”,
            //     “static/video_images/2.jpg”,
            //     “static/video_images/3.jpg”,
            //     “static/video_images/4.jpg”,
            //     “static/video_images/5.jpg”,
            //     “static/video_images/6.jpg”,
            //     “static/video_images/7.jpg”,
            // ]    
        } else {
            console.log('视频图片URLs请求出错:', result.message)
            return null
        }
    } catch (error) {
        console.error('视频图片URLs请求出错:', error);
        return '请求出错，请稍后再试'
    }
}
async function getVideoImageApi(backend_domain_name, token, image_path) {
    const formData = new URLSearchParams();
    formData.append('token', token);
    formData.append('image_path', image_path);

    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/get_video_image', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });
        
        const contentType = response.headers.get('content-type');
       
        if(contentType.includes('application/json')){
            const result = await response.json();
            console.log('获取视频图片失败:', result.message);
            return result.message;
        } else {
            const result = await response.blob();
            console.log('获取视频图片成功:', result);
            return result;
        }
    } catch (error) {
        console.error('获取视频图片失败:', error);
        return null;
    }
}
async function processImageApi(backend_domain_name, token, classes, image){
    console.log('类别：' + classes)
    if (!classes) {
        return { TF: false, message: '未传入 classes 值或 classes 值为空' };
    }
    
    if (!Array.isArray(classes)) {
        return { TF: false, message: 'classes 值不是列表类型' };
    }
    if (!image) {
        return { TF: false, message: '未传入 image 文件' };
    }
    
    try {
        const formData = new FormData();
        formData.append('token', token);
        formData.append('classes', JSON.stringify(classes));
        formData.append('image', image);
        
        const response = await fetch(backend_domain_name + '/show_video_processed_result/process_image', {
            method: 'POST',
            body: formData
        });
        
        const result = await response.json();
        if (result.TF === 'T') {
            console.log('图片处理结果: ' + result.data)
            return { TF: true, data: result.data };
            // 返回的数据示例
            // {
            //     "TF": "T",
            //     "data": {
            //       "head_on_desk": [
            //         [
            //           377,
            //           507,
            //           503,
            //           589
            //         ],
            //         [
            //           1075,
            //           476,
            //           1138,
            //           518
            //         ],
            //         [
            //           1485,
            //           499,
            //           1577,
            //           548
            //         ],
            //         [
            //           824,
            //           487,
            //           873,
            //           518
            //         ]
            //       ],
            //       "stand": [
            //         [
            //           846,
            //           620,
            //           1123,
            //           1080
            //         ],
            //         [
            //           0,
            //           671,
            //           65,
            //           898
            //         ]
            //       ],
            //       "use_phone": [
            //         [
            //           782,
            //           436,
            //           839,
            //           490
            //         ],
            //         [
            //           0,
            //           671,
            //           65,
            //           898
            //         ]
            //       ],
            //       "yolo_model_output": [
            //         [
            //           846,
            //           620,
            //           1123,
            //           1080
            //         ],
            //         [
            //           193,
            //           524,
            //           338,
            //           592
            //         ],
            //         [
            //           1038,
            //           530,
            //           1119,
            //           593
            //         ],
            //         [
            //           782,
            //           436,
            //           839,
            //           490
            //         ],
            //         [
            //           377,
            //           507,
            //           503,
            //           589
            //         ],
            //         [
            //           325,
            //           485,
            //           416,
            //           547
            //         ],
            //         [
            //           1075,
            //           476,
            //           1138,
            //           518
            //         ],
            //         [
            //           475,
            //           487,
            //           563,
            //           548
            //         ],
            //         [
            //           948,
            //           498,
            //           1017,
            //           548
            //         ],
            //         [
            //           668,
            //           394,
            //           712,
            //           437
            //         ],
            //         [
            //           1425,
            //           486,
            //           1500,
            //           549
            //         ],
            //         [
            //           963,
            //           527,
            //           1032,
            //           593
            //         ],
            //         [
            //           886,
            //           481,
            //           938,
            //           516
            //         ],
            //         [
            //           839,
            //           439,
            //           892,
            //           490
            //         ],
            //         [
            //           1485,
            //           499,
            //           1577,
            //           548
            //         ],
            //         [
            //           1153,
            //           357,
            //           1184,
            //           382
            //         ],
            //         [
            //           852,
            //           526,
            //           944,
            //           591
            //         ],
            //         [
            //           1013,
            //           436,
            //           1060,
            //           489
            //         ],
            //         [
            //           571,
            //           420,
            //           633,
            //           461
            //         ],
            //         [
            //           983,
            //           364,
            //           1013,
            //           390
            //         ],
            //         [
            //           908,
            //           399,
            //           961,
            //           439
            //         ],
            //         [
            //           816,
            //           394,
            //           862,
            //           439
            //         ],
            //         [
            //           899,
            //           443,
            //           948,
            //           488
            //         ],
            //         [
            //           748,
            //           371,
            //           787,
            //           456
            //         ],
            //         [
            //           861,
            //           400,
            //           905,
            //           440
            //         ],
            //         [
            //           610,
            //           401,
            //           652,
            //           437
            //         ],
            //         [
            //           824,
            //           487,
            //           873,
            //           518
            //         ],
            //         [
            //           1213,
            //           380,
            //           1253,
            //           415
            //         ],
            //         [
            //           635,
            //           418,
            //           679,
            //           461
            //         ],
            //         [
            //           1030,
            //           389,
            //           1060,
            //           417
            //         ],
            //         [
            //           948,
            //           372,
            //           980,
            //           406
            //         ],
            //         [
            //           512,
            //           436,
            //           599,
            //           489
            //         ],
            //         [
            //           1186,
            //           404,
            //           1246,
            //           438
            //         ],
            //         [
            //           843,
            //           361,
            //           877,
            //           401
            //         ],
            //         [
            //           662,
            //           359,
            //           692,
            //           390
            //         ],
            //         [
            //           1191,
            //           358,
            //           1229,
            //           391
            //         ],
            //         [
            //           1012,
            //           475,
            //           1064,
            //           516
            //         ],
            //         [
            //           1268,
            //           413,
            //           1323,
            //           461
            //         ],
            //         [
            //           1086,
            //           360,
            //           1119,
            //           433
            //         ],
            //         [
            //           1013,
            //           364,
            //           1051,
            //           390
            //         ],
            //         [
            //           955,
            //           459,
            //           1001,
            //           492
            //         ],
            //         [
            //           1314,
            //           421,
            //           1368,
            //           460
            //         ],
            //         [
            //           952,
            //           390,
            //           984,
            //           417
            //         ],
            //         [
            //           650,
            //           380,
            //           681,
            //           417
            //         ],
            //         [
            //           398,
            //           484,
            //           482,
            //           544
            //         ],
            //         [
            //           944,
            //           484,
            //           1004,
            //           516
            //         ],
            //         [
            //           1252,
            //           382,
            //           1294,
            //           414
            //         ],
            //         [
            //           895,
            //           372,
            //           927,
            //           403
            //         ],
            //         [
            //           643,
            //           374,
            //           670,
            //           402
            //         ],
            //         [
            //           994,
            //           392,
            //           1026,
            //           420
            //         ],
            //         [
            //           695,
            //           359,
            //           727,
            //           391
            //         ],
            //         [
            //           733,
            //           361,
            //           759,
            //           389
            //         ],
            //         [
            //           0,
            //           671,
            //           65,
            //           898
            //         ],
            //         [
            //           906,
            //           378,
            //           942,
            //           415
            //         ],
            //         [
            //           1169,
            //           393,
            //           1202,
            //           418
            //         ]
            //       ]
            //     }
            //   }
            // 列表的值分别代表 [x1, y1, x2, y2]
            //  x1: 边界框左上角的 水平坐标（x轴），从图像左边缘开始计算。
            // y1: 边界框左上角的 垂直坐标（y轴），从图像顶部开始计算。
            // x2: 边界框右下角的 水平坐标（x轴），从图像左边缘开始计算。
            // y2: 边界框右下角的 垂直坐标（y轴），从图像顶部开始计算。
              
        } else {
            return { TF: false, message: result.message };
        }
    } catch (error) {
        console.error('请求图片处理服务失败:', error);
        return { TF: false, message: '请求图片处理服务失败: ' + error.message };
    }
}
async function getVideoClassesApi(backend_domain_name, token, video_id){
    const formData = new URLSearchParams();
    formData.append('token', token);
    formData.append('video_id', video_id);
    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/get_video_classes', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });

        const result = await response.json();
        if (result.TF === 'T') {
            console.log('视频类别：', result.classes)
            return result.classes;  
            // 返回的是一个列表，列表里面会包含 look_up, use_phone，stand, head_on_desk 这四种行为的多个或单个
            // 例如：['look_up', 'use_phone', 'stand', 'head_on_desk']
            // 例如：['look_up', 'use_phone']
            // 例如：['stand', 'head_on_desk']
            // 例如：['look_up']
            // 例如：['use_phone']
            // 例如：['stand']
            // 例如：['head_on_desk']
            // 这些英文行为对应的中文分别为：{
            //     "look_up": "抬头",
            //     "use_phone": "使用手机",
            //     "stand": "站立",
            //     "head_on_desk": "趴桌"
            // }
        } else {
            console.log('视频类别请求出错:', result.message)
            return null
        }
    } catch (error) {
        console.error('视频类别请求出错:', error);  
        return null
    }
}

async function getVideoSecondsApi(backend_domain_name, token, video_id){
    const formData = new URLSearchParams();
    formData.append('token', token);
    formData.append('video_id', video_id);
    try {
        const response = await fetch(backend_domain_name + '/show_video_processed_result/get_video_seconds', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: formData
        });
        const result = await response.json();
        if (result.TF === 'T') {
            console.log('帧提取间隔：', result.seconds)
            return result.seconds;
        } else {
            console.log('帧提取间隔请求出错:', result.message)
            return null;
        }
    } catch (error) {
        console.error('帧提取间隔请求出错:', error);
        return null;
    }
}
